import java.util.*;
public class FortunatePackage {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//输入小球的个数
        int[] a = new int[n];//将所有小球放入一个数组中，以数组下标为小球编号
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        Arrays.sort(a);//将小球递增排序，以节省算力
        /*为什么要排序？仍然以（1，1，3，5，7）为例，当取到5时，5不满足要求，
        那么它后面的数都比它大，也一定不满足要求了*/
        System.out.println(count(a, n, 0, 0, 1));//从第一个下标开始取小球

    }
    /*pos是查找“幸运袋子”时的“第一个球的位置”，a[]是目前可供挑选的球，sum为和（初始值为0），multi为积（初始值为1），n为球的个数*/
    public static int count(int[] a,int n,int pos,int sum,int multi){
        int count = 0;
        for (int i = pos; i < n; i++) {
            sum += a[i];
            multi *= a[i];
            //如果这两个球满足“幸运袋子”的要求，“幸运袋子”的组合种类数为 1（这两个球组成的袋子）+ 剩下的所有球中存在的“幸运袋子”数
            if (sum > multi){
                count = count + 1 + count(a,n,i+1,sum,multi);
            }else if (a[i] == 1){
                count = count + count(a,n,i+1,sum,multi);
            }else {
                break;
            }
            //如果这两个球不满足“幸运袋子”的要求，则清除此次操作带来的数据改变，回溯到上一层
            sum -= a[i];
            multi /= a[i];
            //如果这个球不满足要求并且和下一个球的数值相等，则跳过下一个球的检测
            while (i < n-1 && a[i] == a[i+1]){
                i++;
            }
        }
        return count;
    }
}
